// 认证功能测试脚本
// 用于验证登录注册功能是否正常

const axios = require('axios');

// 测试配置
const API_BASE_URL = 'http://localhost:4112';

// 创建axios实例
const apiClient = axios.create({
  baseURL: API_BASE_URL,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  }
});

// 测试数据
const testUser = {
  username: 'test_user_' + Date.now(),
  password: 'test123456',
  code: 'TEST001', // 需要有效的授权码
  qq: '123456789'
};

// 测试函数
async function testAuthEndpoints() {
  console.log('🔐 开始测试认证功能...\n');

  try {
    // 1. 测试注册功能
    console.log('1. 测试用户注册...');
    const registerResponse = await apiClient.post('/register', 
      `username=${testUser.username}&password=${testUser.password}&code=${testUser.code}&qq=${testUser.qq}`
    );
    
    if (registerResponse.data.code === 200) {
      console.log('✅ 用户注册成功');
      console.log(`   用户名: ${testUser.username}\n`);
    } else {
      console.log('❌ 用户注册失败');
      console.log(`   错误信息: ${registerResponse.data.msg}\n`);
      // 如果注册失败，可能是授权码问题，继续测试登录
    }

    // 2. 测试登录功能
    console.log('2. 测试用户登录...');
    const loginResponse = await apiClient.post('/login', 
      `username=${testUser.username}&password=${testUser.password}`
    );
    
    if (loginResponse.data.code === 200) {
      console.log('✅ 用户登录成功');
      console.log(`   Token: ${loginResponse.data.data.token.substring(0, 20)}...`);
      console.log(`   过期时间: ${loginResponse.data.data.expiresIn}秒\n`);
      
      // 3. 测试登出功能
      console.log('3. 测试用户登出...');
      const logoutResponse = await apiClient.post('/logout', 
        `username=${testUser.username}`
      );
      
      if (logoutResponse.data.code === 200) {
        console.log('✅ 用户登出成功\n');
      } else {
        console.log('❌ 用户登出失败');
        console.log(`   错误信息: ${logoutResponse.data.msg}\n`);
      }
    } else {
      console.log('❌ 用户登录失败');
      console.log(`   错误信息: ${loginResponse.data.msg}\n`);
    }

    // 4. 测试无效登录
    console.log('4. 测试无效登录...');
    try {
      await apiClient.post('/login', 
        `username=invalid_user&password=wrong_password`
      );
      console.log('❌ 应该返回登录失败');
    } catch (error) {
      if (error.response && error.response.data.code !== 200) {
        console.log('✅ 无效登录正确处理');
        console.log(`   错误信息: ${error.response.data.msg}\n`);
      } else {
        console.log('❌ 无效登录处理异常\n');
      }
    }

    console.log('🎉 认证功能测试完成！');

  } catch (error) {
    console.error('❌ 认证测试失败:', error.message);
    if (error.response) {
      console.error('   状态码:', error.response.status);
      console.error('   错误信息:', error.response.data);
    }
  }
}

// 测试错误处理
async function testErrorHandling() {
  console.log('\n🔍 测试错误处理...\n');

  try {
    // 测试缺少参数的注册
    console.log('1. 测试缺少参数的注册...');
    try {
      await apiClient.post('/register', 'username=test&password=test');
      console.log('❌ 应该返回参数错误');
    } catch (error) {
      if (error.response && error.response.status === 400) {
        console.log('✅ 参数错误处理正常');
      } else {
        console.log('❌ 参数错误处理异常');
      }
    }

    // 测试缺少参数的登录
    console.log('2. 测试缺少参数的登录...');
    try {
      await apiClient.post('/login', 'username=test');
      console.log('❌ 应该返回参数错误');
    } catch (error) {
      if (error.response && error.response.status === 400) {
        console.log('✅ 参数错误处理正常');
      } else {
        console.log('❌ 参数错误处理异常');
      }
    }
  } catch (error) {
    console.error('❌ 错误处理测试失败:', error.message);
  }
}

// 运行测试
async function runTests() {
  console.log('='.repeat(50));
  console.log('   认证功能测试');
  console.log('='.repeat(50));
  
  await testAuthEndpoints();
  await testErrorHandling();
  
  console.log('\n' + '='.repeat(50));
  console.log('   测试完成');
  console.log('='.repeat(50));
}

// 如果直接运行此脚本
if (require.main === module) {
  runTests().catch(console.error);
}

module.exports = {
  testAuthEndpoints,
  testErrorHandling,
  runTests
};
